// 邮件服务工具类
// 基于nodemailer实现的QQ邮箱服务
import nodemailer from 'nodemailer';
import dotenv from 'dotenv';
import { storeVerificationCode, getVerificationCode, getVerificationCodeSentTime, canSendNewVerificationCode, getRemainingWaitTime } from './redisClient.js';

dotenv.config();

// 创建邮件发送器配置
const transporter = nodemailer.createTransport({
  service: 'qq',
  secure: true, // 使用SSL
  port: 465,
  auth: {
    user: process.env.QQ_EMAIL || '1905714227@qq.com',
    pass: process.env.QQ_EMAIL_AUTH_CODE || 'gbnbhqlhprrgeiei'
  },
  tls: {
    // 忽略证书验证
    rejectUnauthorized: false
  }
});

// 测试邮件连接
async function testEmailConnection() {
  try {
    const testInfo = await transporter.verify();
    console.log('邮件服务连接成功:', testInfo);
    return true;
  } catch (error) {
    console.error('邮件服务连接失败:', error);
    return false;
  }
}

// 生成随机验证码
function generateVerificationCode(length = 6) {
  return Math.random().toString(10).substring(2, 2 + length);
}

// 发送验证码邮件
async function sendVerificationCode(email, userId, username = '') {
  const code = generateVerificationCode();
  console.log(`发送验证码: ${code} 给用户 ${username} (${email}), 临时用户ID: ${userId}`);

  // 邮件内容配置
  const mailOptions = {
    from: {
      name: '我的衣橱系统',
      address: process.env.QQ_EMAIL || '1905714227@qq.com'
    }, // 发件人
    to: email, // 收件人
    subject: '【我的衣橱】邮箱验证码', // 邮件主题
    html: `
      <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #e0e0e0; border-radius: 8px;">
        <div style="text-align: center; margin-bottom: 30px;">
          <h2 style="color: #333;">我的衣橱系统</h2>
          <p style="color: #666;">智能管理您的衣物</p>
        </div>
        
        <div style="background-color: #f9f9f9; padding: 20px; border-radius: 8px; margin-bottom: 30px;">
          <p style="margin-bottom: 20px;">尊敬的${username || '用户'}，您好！</p>
          <p style="margin-bottom: 20px;">您正在进行账号注册或验证，为了保障您的账号安全，请使用以下验证码：</p>
          <div style="text-align: center; margin: 30px 0;">
            <span style="background-color: #4CAF50; color: white; padding: 10px 30px; font-size: 24px; font-weight: bold; letter-spacing: 3px; border-radius: 4px;">
              ${code}
            </span>
          </div>
          <p style="margin-bottom: 10px;">重要提示：</p>
          <ul style="margin-bottom: 20px; color: #666; line-height: 1.6;">
            <li>验证码有效期为 <strong>5 分钟</strong></li>
            <li>请勿将验证码透露给他人</li>
            <li>如非本人操作，请忽略此邮件</li>
          </ul>
        </div>
        
        <div style="text-align: center; color: #999; font-size: 14px;">
          <p>此为系统自动发送邮件，请勿回复</p>
        </div>
      </div>
    `
  };

  try {
    // 发送邮件
    const info = await transporter.sendMail(mailOptions);
    console.log('验证码邮件发送成功:', info.messageId);

    // 返回验证码和过期时间
    return {
      success: true,
      code,
      expiresAt: new Date(Date.now() + 5 * 60 * 1000), // 5分钟后过期
      messageId: info.messageId
    };
  } catch (error) {
    console.error('发送验证码邮件失败:', error);
    return {
      success: false,
      error: error.message || '未知错误'
    };
  }
}

// 发送注册成功通知邮件
async function sendRegistrationSuccessEmail(email, username) {
  const mailOptions = {
    from: {
      name: '我的衣橱系统',
      address: process.env.QQ_EMAIL || '1905714227@qq.com'
    },
    to: email,
    subject: '【我的衣橱】注册成功通知',
    html: `
      <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #e0e0e0; border-radius: 8px;">
        <div style="text-align: center; margin-bottom: 30px;">
          <h2 style="color: #333;">我的衣橱系统</h2>
          <p style="color: #666;">智能管理您的衣物</p>
        </div>
        
        <div style="background-color: #f0f8ff; padding: 20px; border-radius: 8px; margin-bottom: 30px;">
          <h3 style="color: #2196F3; margin-bottom: 20px;">注册成功！</h3>
          <p style="margin-bottom: 15px;">尊敬的${username}，</p>
          <p style="margin-bottom: 15px;">恭喜您成功注册我的衣橱系统账号！</p>
          <p style="margin-bottom: 20px;">您现在可以：</p>
          <ul style="margin-bottom: 20px; line-height: 1.6;">
            <li>管理您的衣物收藏</li>
            <li>创建个性化搭配</li>
            <li>查看天气穿搭建议</li>
            <li>获取衣物统计分析</li>
          </ul>
          <p style="color: #666;">如有任何问题，请随时联系我们的客服团队。</p>
        </div>
        
        <div style="text-align: center; color: #999; font-size: 14px;">
          <p>此为系统自动发送邮件，请勿回复</p>
        </div>
      </div>
    `
  };

  try {
    const info = await transporter.sendMail(mailOptions);
    console.log('注册成功通知邮件发送成功:', info.messageId);
    return true;
  } catch (error) {
    console.error('发送注册成功通知邮件失败:', error);
    return false;
  }
}

// 验证验证码是否正确
function verifyCode(storedCode, userCode) {
  if (!storedCode || !userCode) return false;
  return storedCode === userCode;
}

export {
  sendVerificationCode,
  verifyCode,
  sendRegistrationSuccessEmail,
  transporter
};